<?php
namespace app\model;

use think\Model;

class DictData extends Model
{
    // 设置表名
    protected $name = 'dict_data';
    
    // 自动写入时间戳
    protected $autoWriteTimestamp = true;
    
    // 定义时间戳字段名
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    
    // 定义字段信息
    protected $schema = [
        'id'          => 'int',
        'dict_type'   => 'string',
        'dict_label'  => 'string',
        'dict_value'  => 'string',
        'css_class'   => 'string',
        'list_class'  => 'string',
        'is_default'  => 'int',
        'status'      => 'int',
        'sort'        => 'int',
        'remark'      => 'string',
        'create_time' => 'datetime',
        'update_time' => 'datetime'
    ];
    
    /**
     * 字典类型关联
     */
    public function dictType()
    {
        return $this->belongsTo(DictType::class, 'dict_type', 'dict_type');
    }
    
    /**
     * 字典标签搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchDictLabelAttr($query, $value)
    {
        if (!empty($value)) {
            $query->whereLike('dict_label', '%' . $value . '%');
        }
    }
    
    /**
     * 字典类型搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchDictTypeAttr($query, $value)
    {
        if (!empty($value)) {
            $query->where('dict_type', $value);
        }
    }
    
    /**
     * 状态搜索器
     * @param \think\db\Query $query 查询对象
     * @param int $value 搜索值
     */
    public function searchStatusAttr($query, $value)
    {
        if (isset($value) && $value !== '') {
            $query->where('status', $value);
        }
    }
    
    /**
     * 根据字典类型和字典键值获取字典标签
     * @param string $dictType 字典类型
     * @param string $dictValue 字典键值
     * @return string 字典标签
     */
    public static function getDictLabel($dictType, $dictValue)
    {
        $dictData = self::where('dict_type', $dictType)
            ->where('dict_value', $dictValue)
            ->where('status', 1)
            ->find();
            
        return $dictData ? $dictData->dict_label : '';
    }
    
    /**
     * 根据字典类型和字典标签获取字典键值
     * @param string $dictType 字典类型
     * @param string $dictLabel 字典标签
     * @return string 字典键值
     */
    public static function getDictValue($dictType, $dictLabel)
    {
        $dictData = self::where('dict_type', $dictType)
            ->where('dict_label', $dictLabel)
            ->where('status', 1)
            ->find();
            
        return $dictData ? $dictData->dict_value : '';
    }
    
    /**
     * 根据字典类型获取字典数据列表
     * @param string $dictType 字典类型
     * @return array 字典数据列表
     */
    public static function getDictDataList($dictType)
    {
        return self::where('dict_type', $dictType)
            ->where('status', 1)
            ->order('sort', 'asc')
            ->select()
            ->toArray();
    }
} 